package apmapi

import (
	"fmt"
	"service/app/api"
	"service/app/control"
	"service/app/dto"
	"service/app/mode"

	"github.com/gin-gonic/gin"
)

var (
	APMCREAT = 500001
	APMEDIT  = 500002
	APMDEL   = 500003
	APMALL   = 500004
)

type ApmApi struct {
	api.BaseApi
	apmCont *control.ApmCont
}

func ApmApiInit() ApmApi {
	return ApmApi{
		BaseApi: *api.BaseApi{}.BaseApiInit(),
		apmCont: control.ApmContCreate(),
	}
}

// @Summary 获取所有房间
// @Description
// @Security ApiKeyAuth
// @Router /api/v1/apm [GET]
// @Tags tenant
// @Success 200 {object} []dto.ApmEditDto "成功"
func (m ApmApi) ApmAll(ctx *gin.Context) {
	m.Ctx = ctx
	apmList, err := m.apmCont.ApmAllC()
	if err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error(), Code: APMALL})
		return
	}
	m.Okay(api.ResponseJson{Msg: "获取所有房间成功！", Data: apmList})
}

// @Summary 创建tenant 房间
// @Description
// @Security ApiKeyAuth
// @Router /api/v1/apm [POST]
// @Param object body dto.ApmEditDto true "tenant 房间"
// @Tags tenant
// @Success 200 {object} api.ResponseJson "成功"
func (m ApmApi) ApmAdd(ctx *gin.Context) {
	var addTenant mode.Db_apm
	if err := m.BaseReqHandle(&api.IBaseApiParams{Ctx: ctx, Dto: &addTenant}).GetBaseErr(); err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error()})
		return
	}
	if err := m.apmCont.ApmAddC(&addTenant); err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error(), Code: APMCREAT})
		return
	}
	m.Okay(api.ResponseJson{Msg: fmt.Sprintf("创建房间 %v成功！", addTenant.Room)})
}

// @Summary 修改房间资料
// @Description
// @Security ApiKeyAuth
// @Router /api/v1/apm/{id} [PUT]
// @Param id path int true "roomId"
// @Param object body dto.ApmEditDto true "tenant 房间"
// @Tags tenant
// @Success 200 {object} api.ResponseJson "成功"
func (m ApmApi) ApmEdit(ctx *gin.Context) {
	var id dto.ReqUriIdDto
	if err := m.BaseReqHandle(&api.IBaseApiParams{Ctx: ctx, Dto: &id, ReqUri: true, Valid: true}).GetBaseErr(); err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error()})
		return
	}
	var addTenant dto.ApmEditDto
	if err := m.BaseReqHandle(&api.IBaseApiParams{Ctx: ctx, Dto: &addTenant, Valid: true}).GetBaseErr(); err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error()})
		return
	}
	if err := m.apmCont.ApmEditC(&id, &addTenant); err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error(), Code: APMEDIT})
		return
	}
	m.Okay(api.ResponseJson{Msg: fmt.Sprintf("修改房间资料 id: %v 成功！", id.Id)})
}

// @Summary 删除房间资料
// @Description
// @Security ApiKeyAuth
// @Router /api/v1/apm/{id} [DELETE]
// @Param id path int true "roomId"
// @Tags tenant
// @Success 200 {object} api.ResponseJson "成功"
func (m ApmApi) ApmDel(ctx *gin.Context) {
	var id dto.ReqUriIdDto
	if err := m.BaseReqHandle(&api.IBaseApiParams{Ctx: ctx, Dto: &id, ReqUri: true, Valid: true}).GetBaseErr(); err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error()})
		return
	}

	if err := m.apmCont.ApmDelC(&id); err != nil {
		m.Fail(api.ResponseJson{Msg: err.Error(), Code: APMDEL})
		return
	}
	m.Okay(api.ResponseJson{Msg: fmt.Sprintf("删除 %v 房间资料成功！", id.Id)})
}
